import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'dart:async'; // 添加StreamSubscription导入
import '../../providers/auth_provider.dart';
import '../../widgets/platform/adaptive_button.dart';
import '../../widgets/platform/adaptive_text_field.dart';
// 导入窗口管理器
import '../../../core/platform/window_manager.dart';

/// 登录页面
class LoginPage extends ConsumerStatefulWidget {
  const LoginPage({super.key});

  @override
  ConsumerState<LoginPage> createState() => _LoginPageState();
}

class _LoginPageState extends ConsumerState<LoginPage> {
  final _formKey = GlobalKey<FormState>();
  final _usernameController = TextEditingController();
  final _passwordController = TextEditingController();
  bool _obscurePassword = true;
  bool _isOnline = true; // 网络状态
  bool _isManualMode = false; // 是否为手动模式
  late StreamSubscription<List<ConnectivityResult>>
  _connectivitySubscription; // 网络状态监听
  bool _isLoggingIn = false; // 添加防重复点击标志
  bool _hasShownWelcomeMessage = false; // 添加欢迎消息显示标志

  @override
  void initState() {
    super.initState();
    // 默认填入测试账号和密码
    _usernameController.text = 'admin';
    _passwordController.text = 'flowplan123';
    _checkConnectivity(); // 初始化时检查网络状态
    _listenToConnectivityChanges(); // 监听网络状态变化

    // 重置欢迎消息标志，确保每次进入登录页面都能显示欢迎消息
    _hasShownWelcomeMessage = false;

    // 设置窗口为固定大小
    _setFixedSizeWindow();
  }

  // 设置窗口为固定大小
  void _setFixedSizeWindow() {
    print('设置窗口为固定大小: 360x490');
    // 延迟设置窗口样式，确保窗口已完全初始化
    WidgetsBinding.instance.addPostFrameCallback((_) {
      WindowManager.setWindowStyle(true); // 固定大小
      WindowManager.setWindowSize(360, 490); // 设置窗口大小
      // 使用延迟显示窗口，确保Flutter完全渲染完成
      WindowManager.showWindowAfterRendering();
      print('窗口尺寸设置完成');
    });
  }

  // 检查网络连接状态
  Future<void> _checkConnectivity() async {
    final connectivityResult = await Connectivity().checkConnectivity();
    setState(() {
      _isOnline = connectivityResult.contains(ConnectivityResult.none) == false;
    });
  }

  // 监听网络状态变化
  void _listenToConnectivityChanges() {
    _connectivitySubscription = Connectivity().onConnectivityChanged.listen((
      List<ConnectivityResult> result,
    ) {
      // 只有在非手动模式下才自动更新网络状态
      if (!_isManualMode) {
        setState(() {
          _isOnline = result.contains(ConnectivityResult.none) == false;
        });
      }
    });
  }

  // 手动切换网络状态
  void _toggleNetworkMode() {
    setState(() {
      // 直接切换网络状态，无需先进入手动模式
      _isOnline = !_isOnline;
      _isManualMode = true; // 标记为手动模式，防止自动切换
    });
  }

  @override
  void dispose() {
    _usernameController.dispose();
    _passwordController.dispose();
    _connectivitySubscription.cancel(); // 取消网络状态监听
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final authState = ref.watch(authStateProvider);

    // 添加调试信息
    print(
      '构建登录页面: 用户名=${_usernameController.text}, 密码=${_passwordController.text}',
    );

    // 监听认证状态变化
    ref.listen<AuthState>(authStateProvider, (previous, next) {
      // 无论成功还是失败，都重置登录状态
      if (next is! AuthLoading) {
        setState(() {
          _isLoggingIn = false;
        });
      }

      if (next is AuthSuccess) {
        // 登录成功后调整窗口大小
        WidgetsBinding.instance.addPostFrameCallback((_) async {
          try {
            // 同时进行窗口大小调整和页面跳转
            // 使用Future.wait并行执行窗口调整操作
            await Future.wait([
              WindowManager.setWindowStyle(false), // 可调整大小
              WindowManager.setWindowSize(1200, 800), // 设置窗口大小为1200x800
              WindowManager.setWindowMinimumSize(
                1200,
                800,
              ), // 设置窗口最小大小为1200x800
            ]);

            print('窗口大小已设置为1200x800，最小大小已设置为1200x800');

            // 显示登录成功提示
            if (!_hasShownWelcomeMessage) {
              setState(() {
                _hasShownWelcomeMessage = true;
              });

              if (context.mounted) {
                ScaffoldMessenger.of(context).showSnackBar(
                  const SnackBar(
                    content: Text('登录成功！欢迎使用需求管理平台。'),
                    backgroundColor: Colors.green,
                  ),
                );
              }
            }

            // 立即跳转到仪表板页面
            if (context.mounted) {
              try {
                context.go('/dashboard');
              } catch (e) {
                print('跳转到仪表板页面时出错: $e');
                // 如果跳转失败，显示错误信息
                if (context.mounted) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    const SnackBar(
                      content: Text('跳转到主页时出错，请重试'),
                      backgroundColor: Colors.red,
                    ),
                  );
                }
              }
            }
          } catch (e) {
            print('设置窗口大小时出错: $e');
            // 即使设置窗口大小失败，也要继续跳转
            if (context.mounted) {
              context.go('/dashboard');
            }
          }
        });
      } else if (next is AuthError) {
        // 显示错误信息
        if (context.mounted) {
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(content: Text(next.message), backgroundColor: Colors.red),
          );
        }
      }
    });

    // 固定大小的登录窗口，类似微信样式
    return Scaffold(
      backgroundColor: Colors.white, // 确保Scaffold背景色与窗口一致
      body: Container(
        width: double.infinity,
        height: double.infinity,
        color: Colors.white, // 使用纯色背景替代渐变背景
        child: Center(
          child: ConstrainedBox(
            constraints: const BoxConstraints(maxWidth: 360, maxHeight: 490),
            child: Container(
              decoration: BoxDecoration(
                color: Colors.white,
                borderRadius: BorderRadius.circular(0), // 平滑圆形角落
                boxShadow: [
                  BoxShadow(
                    color: Colors.black.withValues(alpha: 0.1),
                    blurRadius: 20,
                    offset: const Offset(0, 10),
                  ),
                ],
              ),
              child: ClipRRect(
                borderRadius: BorderRadius.circular(0), // 确保子内容也遵循圆角
                child: _buildLoginForm(context, authState),
              ),
            ),
          ),
        ),
      ),
    );
  }

  Widget _buildLoginForm(BuildContext context, AuthState authState) {
    // 添加调试信息
    print('用户名控制器值: ${_usernameController.text}');
    print('密码控制器值: ${_passwordController.text}');

    return LayoutBuilder(
      builder: (context, constraints) {
        return SingleChildScrollView(
          child: Container(
            padding: EdgeInsets.all(constraints.maxWidth * 0.10), // 根据窗口宽度调整内边距
            child: Form(
              key: _formKey,
              child: Column(
                mainAxisSize: MainAxisSize.min,
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: [
                  // Logo和标题区域
                  _buildHeader(constraints.maxWidth),
                  SizedBox(height: constraints.maxHeight * 0.03), // 根据窗口高度调整间距
                  // 网络状态显示区域
                  _buildNetworkStatusIndicator(),
                  SizedBox(height: constraints.maxHeight * 0.03), // 减小间距
                  // 用户名输入框
                  AdaptiveTextField(
                    controller: _usernameController,
                    labelText: '用户名',
                    prefixIcon: Icons.person_outline,
                    hintText: '请输入用户名',
                    contentPadding: const EdgeInsets.symmetric(
                      horizontal: 12,
                      vertical: 10,
                    ), // 更紧凑的内边距
                    validator: (value) {
                      if (value == null || value.isEmpty) {
                        return '请输入用户名';
                      }
                      if (value.length < 3) {
                        return '用户名长度不能少于3位';
                      }
                      return null;
                    },
                  ),
                  SizedBox(height: constraints.maxHeight * 0.025), // 减小间距
                  // 密码输入框
                  AdaptiveTextField(
                    controller: _passwordController,
                    obscureText: _obscurePassword,
                    labelText: '密码',
                    prefixIcon: Icons.lock_outline,
                    hintText: '请输入密码',
                    contentPadding: const EdgeInsets.symmetric(
                      horizontal: 12,
                      vertical: 10,
                    ), // 更紧凑的内边距
                    suffixIcon: IconButton(
                      icon: Icon(
                        _obscurePassword
                            ? Icons.visibility_outlined
                            : Icons.visibility_off_outlined,
                      ),
                      onPressed: () {
                        setState(() {
                          _obscurePassword = !_obscurePassword;
                        });
                      },
                    ),
                    validator: (value) {
                      if (value == null || value.isEmpty) {
                        return '请输入密码';
                      }
                      if (value.length < 6) {
                        return '密码长度不能少于6位';
                      }
                      return null;
                    },
                    textInputAction: TextInputAction.done,
                    onEditingComplete: _handleLogin,
                  ),
                  SizedBox(height: constraints.maxHeight * 0.025), // 调整间距
                  // 登录按钮
                  SizedBox(
                    width: double.infinity,
                    child: AdaptiveButton(
                      onPressed: _isLoggingIn
                          ? null
                          : _handleLogin, // 使用本地状态而不是authState
                      isLoading: _isLoggingIn, // 使用本地状态而不是authState
                      padding: const EdgeInsets.symmetric(
                        horizontal: 16,
                        vertical: 12,
                      ), // 更紧凑的内边距
                      child: const Text('登录'),
                    ),
                  ),
                  SizedBox(height: constraints.maxHeight * 0.02), // 减小间距
                  // 注册链接
                  Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      const Text('没有账户？'),
                      TextButton(
                        onPressed: () => context.push('/register'),
                        child: const Text('立即注册'),
                      ),
                    ],
                  ),
                ],
              ),
            ),
          ),
        );
      },
    );
  }

  // 构建Logo和标题区域
  Widget _buildHeader(double maxWidth) {
    return Column(
      children: [
        Container(
          width: maxWidth * 0.15, // 减小Logo大小
          height: maxWidth * 0.15,
          decoration: BoxDecoration(
            color: Theme.of(context).primaryColor,
            borderRadius: BorderRadius.circular(maxWidth * 0.04), // 调整圆角
          ),
          child: Icon(
            Icons.dashboard_outlined,
            color: Colors.white,
            size: maxWidth * 0.08, // 减小图标大小
          ),
        ),
        SizedBox(height: maxWidth * 0.03), // 减小间距
        Text(
          'FlowPlan',
          style: Theme.of(context).textTheme.titleMedium?.copyWith(
            // 使用更小的字体
            fontWeight: FontWeight.bold,
            color: Theme.of(context).primaryColor,
          ),
        ),
        SizedBox(height: maxWidth * 0.01), // 减小间距
        Text(
          '需求全生命周期智能管理平台',
          style: Theme.of(context).textTheme.bodySmall?.copyWith(
            color: Colors.grey[600],
            fontSize: 12, // 减小字体大小
          ),
          textAlign: TextAlign.center,
        ),
      ],
    );
  }

  // 构建网络状态显示区域
  Widget _buildNetworkStatusIndicator() {
    return Container(
      padding: const EdgeInsets.all(8), // 减小内边距
      decoration: BoxDecoration(
        color: _isOnline ? Colors.green[50] : Colors.orange[50],
        borderRadius: BorderRadius.circular(6), // 减小圆角
        border: Border.all(
          color: _isOnline ? Colors.green[200]! : Colors.orange[200]!,
        ),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Row(
                children: [
                  Icon(
                    _isOnline ? Icons.wifi : Icons.wifi_off,
                    color: _isOnline ? Colors.green[700] : Colors.orange[700],
                    size: 14, // 减小图标大小
                  ),
                  const SizedBox(width: 4), // 减小间距
                  Text(
                    _isOnline ? '在线模式' : '离线模式',
                    style: TextStyle(
                      color: _isOnline ? Colors.green[800] : Colors.orange[800],
                      fontSize: 12, // 减小字体大小
                      fontWeight: FontWeight.w500,
                    ),
                  ),
                ],
              ),
              // 离线按钮
              ElevatedButton(
                onPressed: _toggleNetworkMode,
                style: ElevatedButton.styleFrom(
                  backgroundColor: _isOnline ? Colors.orange : Colors.green,
                  foregroundColor: Colors.white,
                  padding: const EdgeInsets.symmetric(
                    horizontal: 8,
                    vertical: 4,
                  ), // 减小内边距
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(12), // 减小圆角
                  ),
                  elevation: 0,
                  minimumSize: const Size(0, 24), // 减小最小高度
                  tapTargetSize: MaterialTapTargetSize.shrinkWrap, // 紧凑布局
                ),
                child: Text(
                  _isOnline ? '切换离线' : '切换在线',
                  style: const TextStyle(
                    fontSize: 10, // 减小字体大小
                    fontWeight: FontWeight.w500,
                  ),
                ),
              ),
            ],
          ),
          if (!_isOnline)
            const Padding(
              padding: EdgeInsets.only(top: 4.0), // 减小间距
              child: Text(
                '注意：离线模式需要您之前已在线登录过',
                style: TextStyle(
                  fontSize: 10, // 减小字体大小
                  color: Colors.grey,
                ),
              ),
            ),
        ],
      ),
    );
  }

  void _handleLogin() async {
    if (_formKey.currentState!.validate()) {
      setState(() {
        _isLoggingIn = true; // 设置登录状态为true，防止重复点击
      });

      print('处理登录请求: username=${_usernameController.text.trim()}');
      // 调用登录方法，传入用户名、密码和当前网络状态
      ref
          .read(authStateProvider.notifier)
          .login(
            _usernameController.text.trim(),
            _passwordController.text.trim(),
            isOnlineOverride: _isOnline,
          );
    }
  }
}
